Ruby的Blocks、Procs在其他的語言裡面,它們的名字叫做Anonymous Functions(匿名函數)
它們比較像是一個暫時性的功能,用來處理一些特別的狀況。
Blocks(區塊)
Blocks是暫時性的執行區塊碼,之前的例子已經用過了。
如app/view/index.html.erb
每一筆@guest的資料都會執行一次|guest|......這個Blocks的程式碼。
<% @guest.each do |guest| %>
<li>
<%= guest.title %>
<%= link_to 'Show', :controller => 'guests', :action => 'show', :id => guest %>
<%= link_to 'Edit', :controller => 'guests', :action => 'edit', :id => guest %>
<%= link_to 'Delete', :controller => 'guests', :action => 'destroy', :id => guest %>
</li>
<% end %>
Procs
Procs則是讓我們儲存會重複使用很多次的程式碼,例如
#印出大於30歲user的姓名
User.where("age > 30").each {|user| puts user.name}
#印出年齡介於30到60之間的user的姓名
User.where("age > 30 AND age <60").each {|user| puts user.name}
其中{|user| puts user.name}重複出現了兩次
我們就可以把它儲存成一個Procs讓我們不用做重複的事。
printer = Procs.new {|user| puts user.name}
User.where("age>30").each(&printer)
User.where("age>30 AND age<60").each(&printer)
Blocks是馬上用/只用一次的程式區塊,而Procs就是可以重複多次使用的程式。